package scheduler.core.task;

import java.util.HashSet;
import scheduler.core.utils.TaskPoolValidationException;

/**
 *
 * @author Volodymyr Pogorelov
 */
public class VirtualTaskPool extends TaskPoolBase{
    private double lambda; // средняя интенсивность выполнения задач i-го приоритета
    private double nu; // среднее время выполнения задач i-го приоритета
    private int size; // количество задач i-го приоритета
    
    public VirtualTaskPool(int prior, int size, double lambda, double nu) throws TaskPoolValidationException{
        super(prior);
        if(lambda < 0){
            throw new TaskPoolValidationException(prior, TaskPoolValidationException.ErrorType.INVALID_LAMBDA, 
                    "Середня інтенсівність задач " + prior + "-го пріорітету повинна бути "
                    + "не від'ємним числом");
        }
        this.lambda = lambda;
        if(nu < 0){
            throw new TaskPoolValidationException(prior, TaskPoolValidationException.ErrorType.INVALID_NU, 
                    "Середній час виконання задач " + prior + "-го пріорітету повинен бути "
                    + "не від'ємним числом");
        }
        this.nu = nu;
        if(size < 0){
            throw new TaskPoolValidationException(prior, TaskPoolValidationException.ErrorType.INVALID_SIZE, 
                    "Кількість задач " + prior + "-го пріорітету повинна бути "
                    + "не від'ємним числом");
        }
        this.size = size;
    }

    public void setLambda(double lambda) {
        this.lambda = lambda;
    }

    public void setNu(double nu) {
        this.nu = nu;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public double getLambda() {
        return lambda;
    }

    public double getNu() {
        return nu;
    }

    public int getSize() {
        return size;
    }

    @Override
    public double getLambdai(){
        return lambda;
    }
    
    @Override
    public double getNui(){
        return nu;
    }
    
    @Override
    public int getN(){
        return size;
    }

    @Override
    public String toString() {
        return "VirtualTaskPool{" + "prior=" + getPrior() + ", lambda=" + lambda + ", nu=" + nu + ", size=" + size + '}';
    }
}
